package locacao.apresentacao.ctr;

import java.awt.Frame;
import java.sql.Connection;
import java.sql.Date;

import locacao.apresentacao.bd.ClienteBD;
import locacao.apresentacao.bd.FaturaBD;
import locacao.apresentacao.bd.FuncionarioBD;
import locacao.apresentacao.bd.ItemServicoBD;
import locacao.apresentacao.bd.ItemVeiculoBD;
import locacao.apresentacao.bd.LocacaoBD;
import locacao.apresentacao.bd.PessoaBD;
import locacao.apresentacao.bd.ServicoBD;
import locacao.apresentacao.bd.VeiculoBD;
import locacao.apresentacao.gui.RentACarGUI;

/**
 * Classe Controle
 */

public class RentACarCTR {
	
	private RentACarGUI rentACarGUI;
	private VeiculoBD veiculoBD;
	private ClienteBD clienteBD;
	private FaturaBD faturaBD;
	private FuncionarioBD funcionarioBD;
	private ItemServicoBD itemServicoBD;
	private ItemVeiculoBD itemVeiculoBD;
	private LocacaoBD locacaoBD;
	private PessoaBD pessoaBD;
	private ServicoBD servicoBD;
	

	/**
	 * 
	 */
	public RentACarCTR(){
		rentACarGUI = new RentACarGUI(this);
		veiculoBD = new VeiculoBD();
		clienteBD = new ClienteBD();
		faturaBD = new FaturaBD();
		funcionarioBD = new FuncionarioBD();
		itemServicoBD = new ItemServicoBD();
		itemVeiculoBD = new ItemVeiculoBD();
		locacaoBD = new LocacaoBD();
		servicoBD = new ServicoBD();	
		pessoaBD = new PessoaBD();	
	}
	
	
	/**
	 * @return
	 */
	public RentACarGUI getRentACarGUI() {
		return rentACarGUI;
	}


	public Connection gerarRelatorio(){		
		return veiculoBD.gerarRelatorioVeiculos();
	}
	
	//Veiculos
	public void addVeiculo(String fabricante, String modelo, int ano,
                  int qtdPortas, String cor, String placa, String combustivel,
                  String status){
		try {
			
			veiculoBD.addVeiculo(fabricante, modelo, ano, qtdPortas, cor, placa, combustivel, status);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}

	public void updateVeiculo(int idVeiculo, String fabricante, String modelo, int ano,
                  int qtdPortas, String cor, String placa, String combustivel,
                  String status){
   
		try {
			veiculoBD.updateVeiculo(idVeiculo, fabricante, modelo, ano, qtdPortas, cor, placa, combustivel, status);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeVeiculo(int idVeiculo){
		try {
			veiculoBD.excludeVeiculo(idVeiculo);	
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
    public String[] getInfoVeiculos(){
    	return veiculoBD.getInfoVeiculos();

    }
    
    public String[] getPesquisaVeiculos(Integer id){
    	try {
    		return veiculoBD.getPesquisaVeiculos(id);
	    } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
    }
    
    public void loadVeiculoGUI(Frame frame, RentACarCTR rentACarCTR){
        rentACarCTR.getRentACarGUI().loadVeiculoGUI(frame, rentACarCTR.getRentACarGUI());
    }
    
	public VeiculoBD getVeiculoBD() {
		return veiculoBD;
	}

	public void setVeiculoBD(VeiculoBD veiculoBD) {
		this.veiculoBD = veiculoBD;
	}
    
	
	//Faturas
	public void addFatura(Integer idFatura, Date dataEmissao, float valorTotal,
			Integer idLocacao){
		try {
			
			faturaBD.addFatura(idFatura, dataEmissao, valorTotal, idLocacao);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateFatura(Integer idFatura, Date dataEmissao, float valorTotal,
			Integer idLocacao){
	
		try {
			faturaBD.updateFatura(idFatura, dataEmissao, valorTotal, idLocacao);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeFatura(int idFatura){
		try {
			faturaBD.excludeFatura(idFatura);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoFaturas(){
		return faturaBD.getInfoFaturas();
	
	}
	
	public String[] getPesquisaFaturas(Integer idFatura, Integer idLocacao){
		try {
			return faturaBD.getPesquisaFaturas(idFatura,idLocacao);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadFaturaGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadFaturaGUI(frame, rentACarCTR.getRentACarGUI());
	}


	public ClienteBD getFaturaBD() {
		return clienteBD;
	}


	public void setFaturaBD(ClienteBD clienteBD) {
		this.clienteBD = clienteBD;
	}
	
	//Clientes
	public void addCliente(Integer idCliente, Integer idPessoa, String cnh){
		try {
			
			clienteBD.addCliente(idCliente, idPessoa, cnh);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateCliente(Integer idCliente, Integer idPessoa, String cnh){
	
		try {
			clienteBD.updateCliente(idCliente, idPessoa, cnh);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeCliente(int idCliente){
		try {
			clienteBD.excludeCliente(idCliente);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoClientes(){
		return clienteBD.getInfoClientes();
	
	}
	
	public String[] getPesquisaClientes(Integer id){
		try {
			return clienteBD.getPesquisaClientes(id);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadClienteGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadClienteGUI(frame, rentACarCTR.getRentACarGUI());
	}


	public ClienteBD getClienteBD() {
		return clienteBD;
	}


	public void setClienteBD(ClienteBD clienteBD) {
		this.clienteBD = clienteBD;
	}
	
	//Funcionarios
	public void addFuncionario(Integer idFuncionario, Integer idPessoa,
			Date dataAdmissao, String status){
		try {
			
			funcionarioBD.addFuncionario(idFuncionario, idPessoa, dataAdmissao, status);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateFuncionario(Integer idFuncionario, Integer idPessoa,
			Date dataAdmissao, String status){
	
		try {
			funcionarioBD.updateFuncionario(idFuncionario, idPessoa, dataAdmissao, status);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeFuncionario(int idFuncionario){
		try {
			funcionarioBD.excludeFuncionario(idFuncionario);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoFuncionarios(){
		return funcionarioBD.getInfoFuncionarios();
	
	}
	
	public String[] getPesquisaFuncionarios(Integer id){
		try {
			return funcionarioBD.getPesquisaFuncionarios(id);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadFuncionarioGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadFucionarioGUI(frame, rentACarGUI);
	}


	public FuncionarioBD getFuncionarioBD() {
		return funcionarioBD;
	}


	public void setFuncionarioBD(FuncionarioBD funcionarioBD) {
		this.funcionarioBD = funcionarioBD;
	}
	
	//Item Servico
	public void addItemServico(Integer idLocacao, Integer idServico,
			Integer quantidadeServico, float valorUnitario){
		try {
			
			itemServicoBD.addItemServico(idLocacao, idServico, quantidadeServico, valorUnitario);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateItemServico(Integer idLocacao, Integer idServico,
			Integer quantidadeServico, float valorUnitario){
	
		try {
			itemServicoBD.updateItemServico(idLocacao, idServico, quantidadeServico, valorUnitario);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeItemServico(Integer idLocacao, Integer idServico){
		try {
			itemServicoBD.excludeItemServico(idLocacao, idServico);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoItemServicos(){
		return itemServicoBD.getInfoItemServicos();
	
	}
	
	public String[] getPesquisaItemServicos(Integer idLocacao, Integer idServico){
		try {
			return itemServicoBD.getPesquisaItemServicos(idLocacao, idServico);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadItemServicoGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadItemServicoGUI(frame, rentACarGUI);
	}


	public ItemServicoBD getItemServicoBD() {
		return itemServicoBD;
	}


	public void setItemServicoBD(ItemServicoBD itemServicoBD) {
		this.itemServicoBD = itemServicoBD;
	}
	
	//Item Veiculo
	public void addItemVeiculo(Integer idLocacao, Integer idVeiculo,
			Integer quantidadeDiaria, float valorDiaria){
		try {
			
			itemVeiculoBD.addItemVeiculo(idLocacao, idVeiculo, quantidadeDiaria, valorDiaria);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateItemVeiculo(Integer idLocacao, Integer idVeiculo,
			Integer quantidadeDiaria, float valorDiaria){
	
		try {
			itemVeiculoBD.updateItemVeiculo(idLocacao, idVeiculo, quantidadeDiaria, valorDiaria);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeItemVeiculo(Integer idLocacao, Integer idVeiculo){
		try {
			itemVeiculoBD.excludeItemVeiculo(idLocacao, idVeiculo);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoItemVeiculos(){
		return itemVeiculoBD.getInfoItemVeiculos();
	
	}
	
	public String[] getPesquisaItemVeiculos(Integer idLocacao, Integer idServico){
		try {
			return itemVeiculoBD.getPesquisaItemVeiculos(idLocacao, idServico);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadItemVeiculoGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadItemVeiculoGUI(frame, rentACarGUI);
	}


	public ItemVeiculoBD getItemVeiculoBD() {
		return itemVeiculoBD;
	}


	public void setItemVeiculoBD(ItemVeiculoBD itemVeiculoBD) {
		this.itemVeiculoBD = itemVeiculoBD;
	}
	
	//Locacao
	public void addLocacao(Integer idLocacao, Date dataRetirada, Date dataDevolucao,
			String observacao, Integer idCliente, Integer idFuncionario){
		try {
			
			locacaoBD.addLocacao(idLocacao, dataRetirada, dataDevolucao, observacao, idCliente, idFuncionario);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateLocacao(Integer idLocacao, Date dataRetirada, Date dataDevolucao,
			String observacao, Integer idCliente, Integer idFuncionario){
	
		try {
			locacaoBD.updateLocacao(idLocacao, dataRetirada, dataDevolucao, observacao, idCliente, idFuncionario);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeLocacao(Integer idLocacao){
		try {
			locacaoBD.excludeLocacao(idLocacao);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoLocacoes(){
		return locacaoBD.getInfoLocacoes();
	
	}
	
	public String[] getPesquisaLocacaos(Integer id){
		try {
			return locacaoBD.getPesquisaLocacoes(id);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadLocacaoGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadLocacaoGUI(frame, rentACarGUI);
	}


	public LocacaoBD getLocacaoBD() {
		return locacaoBD;
	}


	public void setLocacaoBD(LocacaoBD locacaoBD) {
		this.locacaoBD = locacaoBD;
	}
	
	//Pessoa
	public void addPessoa(Integer idPessoa, String nome, Date dataNascimento, String endereco, String telefone){
		try {
			
			pessoaBD.addPessoa(idPessoa, nome, dataNascimento, endereco, telefone);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updatePessoa(Integer idPessoa, String nome, Date dataNascimento, String endereco, String telefone){
	
		try {
			pessoaBD.updatePessoa(idPessoa, nome, dataNascimento, endereco, telefone);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludePessoa(Integer idPessoa){
		try {
			pessoaBD.excludePessoa(idPessoa);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoPessoas(){
		return pessoaBD.getInfoPessoas();
	
	}
	
	public String[] getPesquisaPessoas(Integer id){
		try {
			return pessoaBD.getPesquisaPessoas(id);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadPessoaGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadPessoaGUI(frame, rentACarGUI);
	}


	public PessoaBD getPessoaBD() {
		return pessoaBD;
	}


	public void setPessoaBD(PessoaBD pessoaBD) {
		this.pessoaBD = pessoaBD;
	}
	
	//Servico
	public void addServico(Integer idServico, String descricaoServico, float valorUnitario){
		try {
			
			servicoBD.addServico(idServico, descricaoServico, valorUnitario);
			
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	public void updateServico(Integer idServico, String descricaoServico, float valorUnitario){
	
		try {
			servicoBD.updateServico(idServico, descricaoServico, valorUnitario);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}	
	}
	
	public void excludeServico(Integer idServico){
		try {
			servicoBD.excludeServico(idServico);
		} catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
		}
	}
	
	
	public String[] getInfoServicos(){
		return servicoBD.getInfoServicos();
	
	}
	
	public String[] getPesquisaServicos(Integer id){
		try {
			return servicoBD.getPesquisaServicos(id);
	  } catch (Exception e) {
			System.out.println("Log Erro: " + e.getMessage());
			return null;
		}
	}
	
	public void loadServicoGUI(Frame frame, RentACarCTR rentACarCTR){
	  rentACarCTR.getRentACarGUI().loadServicoGUI(frame, rentACarGUI);
	}


	public ServicoBD getServicoBD() {
		return servicoBD;
	}


	public void setServicoBD(ServicoBD servicoBD) {
		this.servicoBD = servicoBD;
	}
}
